package com.xiangmo.travel.Utils;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.stereotype.Component;

import java.util.Objects;
import java.util.UUID;
import java.util.concurrent.TimeUnit;

/**
 * token工具
 */
@Component
public class TokenUtil {
    //token 失效时间5min
    private static  final long EXPIRE_TIME = 3600L;
    //token 前缀
    private static  final String TOKEN_PREFIX = "TOKEN:";

    @Autowired
    private RedisTemplate<Object, Object> redisTemplate;

    /**
     * 生成Token并保存到Redis中
     *
     * @param userId 用户ID
     * @return 生成的Token字符串
     */
    public String generateToken(String userId) {
        String token = TOKEN_PREFIX + UUID.randomUUID().toString().replace("-", "");
        redisTemplate.opsForValue().set(token, userId, EXPIRE_TIME, TimeUnit.SECONDS);
        return token;
    }

    /**
     * 验证Token是否有效
     *
     * @param token Token字符串
     * @return 如果Token有效，则返回对应的用户ID，否则返回null
     */
    public String validateToken(String token) {
        String tokenStr = token.substring(7);
        String userId = (String) redisTemplate.opsForValue().get(tokenStr);
//        System.out.println("userId:"+userId);
        if (userId != null) {

            redisTemplate.expire(token, EXPIRE_TIME, TimeUnit.SECONDS);
            return userId;
        }
        return null;
    }

    /**
     * 从Redis中删除指定的Token
     *
     * @param token Token字符串
     */
    public void deleteToken(String token) {
        redisTemplate.delete(token);
    }

    /**
     * 查询 token 对应的值
     */

    public Long getTokenValue(String token) {
        String tokenStr = token.substring(7);
        String value = (String) redisTemplate.opsForValue().get(tokenStr);
        return value != null ? Long.parseLong(value) : null;
    }
}
